/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package estructurassa.expertos;

import estructurassa.entidades.CostoFijo;
import estructurassa.expertos.excepciones.ABMCostoFijoException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;
import persistencia.Conexion;
import persistencia.Fachada;
import persistencia.exceptions.ExcepcionFachada;

/**
 *
 * @author Juan
 */
public class ExpertoABMCostosFijos implements Experto {

    
    public void validarFechasCostoFijo(CostoFijo costo){
        if (Integer.parseInt(costo.getMes())>12) {
            Integer nuevoanio = Integer.parseInt(costo.getMes())-12;
            costo.setAnio(String.valueOf(Integer.parseInt(costo.getAnio())+1));
            costo.setMes(String.valueOf(nuevoanio));
            validarFechasCostoFijo(costo);
        }
        
    }
    
    public void guardar(CostoFijo costo) throws ABMCostoFijoException {
        validarProveedor(costo);
        validarExistencia(costo);
        


        try {
            Conexion.getInstancia().iniciarTX();
            Fachada.getInstancia().guardar(costo);
            Conexion.getInstancia().confirmarTx();
        } catch (ExcepcionFachada ex) {
            Conexion.getInstancia().deshacerTx();
            Logger.getLogger(ExpertoABMProveedor.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public List buscarCostos() {
        return Fachada.getInstancia().buscar(CostoFijo.class, null);
    }

    public List buscarCostos(String descripcion, Date fechaDesde, Date fechaHasta) {
        Criteria criterioCosto = Fachada.getInstancia().crearCriterio(CostoFijo.class);

        if (!"".equals(descripcion)) {
            criterioCosto.add(Restrictions.ilike("descripcion", descripcion));
        }
        if (fechaDesde != null) {
            criterioCosto.add(Restrictions.ge("fechaDesde", fechaDesde));

        }
        if (fechaHasta != null) {

            criterioCosto.add(Restrictions.le("fechaHasta", fechaHasta));
        }

        return Fachada.getInstancia().buscar(CostoFijo.class, criterioCosto);
    }

    public List buscarCostosDeMesYAnio(String mes, String anio) {
        Criteria criterioCosto = Fachada.getInstancia().crearCriterio(CostoFijo.class);
        criterioCosto.add(Restrictions.eq("mes", mes));
        criterioCosto.add(Restrictions.eq("anio", anio));
        List listaCostosFijos = Fachada.getInstancia().buscar(CostoFijo.class, criterioCosto);
 
        return listaCostosFijos;
    }

    private void validarProveedor(CostoFijo costo) throws ABMCostoFijoException {
//        if (costo.getDescripcion().length() == 0) {
//            throw new ABMCostoFijoException("Falta nombre");
//        }
//
//        if (!costo.getAnio().equals("")) {
//            throw new ABMCostoFijoException("Falta año");
//        }
//        if (!costo.getMes().equals("")) {
//            throw new ABMCostoFijoException("Falta mes");
//        }

    }

    private void validarExistencia(CostoFijo costo) throws ABMCostoFijoException {
        if (costo.getId() == null) {
            return;
        }

    }

    public void darDeBaja(CostoFijo costo) throws ExcepcionFachada {

        Fachada.getInstancia().eliminar(costo);
    }
    
    
    
    
}
